package main

import "fmt"

/*
特性： 1. 关键字 defer 用于注册延迟调用。
 2. 这些调用直到 return 前才被执行。因此，可以用来做资源清理。
 3. 多个defer语句，按先进后出的方式执行。
 4. defer语句中的变量，在defer声明时就决定了。

用途：1. 关闭文件句柄
 2. 锁资源释放
 3. 数据库连接释放
*/
func main() {
	//fmt.Println(0)
	//Do()
	fmt.Println(err(6, 3))
}

func Do() {
	// defer 先进后出
	defer fmt.Println(1)
	fmt.Println(2)
	defer fmt.Println(3)
	defer fmt.Println(4)
	fmt.Println(5)
}

func err(a, b int) int {

	if b == 0 {
		return 0
	}
	defer fmt.Printf("%d %d \n", a, b)
	fmt.Println("我的代码位置在defer之后")
	return a / b

}
